package _11_位运算;

// 如果对于取余数，长度为2^n次方的话，可以使用 x & n - 1,来替代取模运算
public class _231_2_的幂 {

    private static int BIG = 1 << 30;

    // 1 1
    public static void main(String[] args) {

        System.out.println(isPowerOfTwo(0));
    }

    // 判断取余是否为0
    public static boolean isPowerOfTwo(int n) {
        return n > 0 && BIG % n == 0;
    }

    public static boolean isPowerOfTwo3(int n) {
        return n > 0 && (n & -n) == n;
    }

    // n -1 判断
    public static boolean isPowerOfTwo2(int n) {
        return n > 0 && (n & (n - 1)) == 0;
    }

    // 移位判断
    public static boolean isPowerOfTwo1(int n) {
        if (n < 0) {
            return false;
        }
        String binaryStr = Integer.toBinaryString(n);
        int len = binaryStr.length();
        while (len-- > 0) {
            // 查看最后一位是否为0
            if ((n & 1) != 0) {
                return len == 0;
            }
            n >>= 1;
        }
        return false;
    }

}
